home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / ip / nfs / nfswatch4.0 / xdr.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-01  |  4.6 KB  |  232 lines

  1. #ifndef lint
  2. static char *RCSid = "$Header: /home/harbor/davy/system/nfswatch/RCS/xdr.c,v 4.0 1993/03/01 19:59:00 davy Exp $";
  3. #endif
  4.  
  5. #include "os.h"
  6.  
  7. /*
  8.  * xdr.c - XDR routines for decoding NFS packets.
  9.  *
  10.  * David A. Curry                Jeffrey C. Mogul
  11.  * Purdue University                Digital Equipment Corporation
  12.  * Engineering Computer Network            Western Research Laboratory
  13.  * 1285 Electrical Engineering Building        250 University Avenue
  14.  * West Lafayette, IN 47907-1285        Palo Alto, CA 94301
  15.  * davy@ecn.purdue.edu                mogul@decwrl.dec.com
  16.  *
  17.  * $Log: xdr.c,v $
  18.  * Revision 4.0  1993/03/01  19:59:00  davy
  19.  * NFSWATCH Version 4.0.
  20.  *
  21.  * Revision 3.4  1993/01/16  19:08:59  davy
  22.  * Corrected Jeff's address.
  23.  *
  24.  * Revision 3.3  1993/01/15  19:33:39  davy
  25.  * Miscellaneous cleanups.
  26.  *
  27.  * Revision 3.2  1993/01/15  15:43:36  davy
  28.  * Assorted changes for porting to Solaris 2.x/SVR4.
  29.  *
  30.  * Revision 3.1  1993/01/13  20:18:17  davy
  31.  * Put in OS-specific define scheme, and merged in Tim Hudson's code for
  32.  * SGI systems (as yet untested).
  33.  *
  34.  * Revision 3.0  1991/01/23  08:23:39  davy
  35.  * NFSWATCH Version 3.0.
  36.  *
  37.  * Revision 1.2  90/08/17  15:47:53  davy
  38.  * NFSWATCH Version 2.0.
  39.  * 
  40.  * Revision 1.1  88/11/29  11:21:08  davy
  41.  * NFSWATCH Release 1.0
  42.  * 
  43.  */
  44. #include <sys/param.h>
  45. #include <netinet/in.h>
  46. #ifdef SVR4
  47. #include <sys/tiuser.h>
  48. #endif
  49. #include <rpc/types.h>
  50. #include <rpc/xdr.h>
  51. #include <rpc/auth.h>
  52. #include <rpc/clnt.h>
  53. #include <rpc/rpc_msg.h>
  54. #include <rpc/svc.h>
  55. #include <errno.h>
  56. #include <stdio.h>
  57.  
  58. #define NFSSERVER    1
  59.  
  60. #ifdef sun
  61. #include <sys/vfs.h>
  62. #include <nfs/nfs.h>
  63. #endif
  64. #ifdef ultrix
  65. #include <sys/types.h>
  66. #include <sys/time.h>
  67. #include <nfs/nfs.h>
  68. #endif
  69. #ifdef sgi
  70. #include <sys/time.h>
  71. #include "sgi.map.h"
  72. #endif
  73.  
  74. #include "nfswatch.h"
  75.  
  76. bool_t
  77. xdr_creatargs(xdrs, argp)
  78. register struct nfscreatargs *argp;
  79. register XDR *xdrs;
  80. {
  81.     if (xdr_diropargs(xdrs, &argp->ca_da) &&
  82.         xdr_sattr(xdrs, &argp->ca_sa))
  83.         return(TRUE);
  84.  
  85.     return(FALSE);
  86. }
  87.  
  88. bool_t
  89. xdr_diropargs(xdrs, argp)
  90. register struct nfsdiropargs *argp;
  91. register XDR *xdrs;
  92. {
  93.     if (xdr_fhandle(xdrs, &argp->da_fhandle) &&
  94.         xdr_string(xdrs, &argp->da_name, NFS_MAXNAMLEN)) {
  95.         free(argp->da_name);
  96.         return(TRUE);
  97.     }
  98.  
  99.     return(FALSE);
  100. }
  101.  
  102. bool_t
  103. xdr_fhandle(xdrs, argp)
  104. fhandle_t *argp;
  105. register XDR *xdrs;
  106. {
  107.     if (xdr_opaque(xdrs, (caddr_t) argp, NFS_FHSIZE))
  108.         return(TRUE);
  109.  
  110.     return(FALSE);
  111. }
  112.  
  113. bool_t
  114. xdr_linkargs(xdrs, argp)
  115. register struct nfslinkargs *argp;
  116. register XDR *xdrs;
  117. {
  118.     if (xdr_fhandle(xdrs, &argp->la_from) &&
  119.         xdr_diropargs(xdrs, &argp->la_to))
  120.         return(TRUE);
  121.  
  122.     return(FALSE);
  123. }
  124.  
  125. bool_t
  126. xdr_rddirargs(xdrs, argp)
  127. register struct nfsrddirargs *argp;
  128. register XDR *xdrs;
  129. {
  130.     if (xdr_fhandle(xdrs, &argp->rda_fh) &&
  131.         xdr_u_long(xdrs, &argp->rda_offset) &&
  132.         xdr_u_long(xdrs, &argp->rda_count))
  133.         return(TRUE);
  134.  
  135.     return(FALSE);
  136. }
  137.  
  138. bool_t
  139. xdr_readargs(xdrs, argp)
  140. register struct nfsreadargs *argp;
  141. register XDR *xdrs;
  142. {
  143.     if (xdr_fhandle(xdrs, &argp->ra_fhandle) &&
  144.         xdr_long(xdrs, (long *) &argp->ra_offset) &&
  145.         xdr_long(xdrs, (long *) &argp->ra_count) &&
  146.         xdr_long(xdrs, (long *) &argp->ra_totcount))
  147.         return(TRUE);
  148.  
  149.     return(FALSE);
  150. }
  151.  
  152. bool_t
  153. xdr_rnmargs(xdrs, argp)
  154. register struct nfsrnmargs *argp;
  155. register XDR *xdrs;
  156. {
  157.     if (xdr_diropargs(xdrs, &argp->rna_from) &&
  158.         xdr_diropargs(xdrs, &argp->rna_to))
  159.         return(TRUE);
  160.  
  161.     return(FALSE);
  162. }
  163.  
  164. bool_t
  165. xdr_saargs(xdrs, argp)
  166. register struct nfssaargs *argp;
  167. register XDR *xdrs;
  168. {
  169.     if (xdr_fhandle(xdrs, &argp->saa_fh) &&
  170.         xdr_sattr(xdrs, &argp->saa_sa))
  171.         return(TRUE);
  172.  
  173.     return(FALSE);
  174. }
  175.  
  176. bool_t
  177. xdr_sattr(xdrs, argp)
  178. register struct nfssattr *argp;
  179. register XDR *xdrs;
  180. {
  181.     if (xdr_u_long(xdrs, &argp->sa_mode) &&
  182.         xdr_u_long(xdrs, &argp->sa_uid) &&
  183.         xdr_u_long(xdrs, &argp->sa_gid) &&
  184.         xdr_u_long(xdrs, &argp->sa_size) &&
  185.         xdr_timeval(xdrs, &argp->sa_atime) &&
  186.         xdr_timeval(xdrs, &argp->sa_mtime))
  187.         return(TRUE);
  188.  
  189.     return(FALSE);
  190. }
  191.  
  192. bool_t
  193. xdr_slargs(xdrs, argp)
  194. register struct nfsslargs *argp;
  195. register XDR *xdrs;
  196. {
  197.     if (xdr_diropargs(xdrs, &argp->sla_from) &&
  198.         xdr_string(xdrs, &argp->sla_tnm, (u_int) MAXPATHLEN) &&
  199.         xdr_sattr(xdrs, &argp->sla_sa)) {
  200.         free(argp->sla_tnm);
  201.         return(TRUE);
  202.     }
  203.  
  204.     return(FALSE);
  205. }
  206.  
  207. bool_t
  208. xdr_timeval(xdrs, argp)
  209. register struct timeval *argp;
  210. register XDR *xdrs;
  211. {
  212.     if (xdr_long(xdrs, &argp->tv_sec) &&
  213.         xdr_long(xdrs, &argp->tv_usec))
  214.         return(TRUE);
  215.  
  216.     return(FALSE);
  217. }
  218.  
  219. bool_t
  220. xdr_writeargs(xdrs, argp)
  221. register struct nfswriteargs *argp;
  222. register XDR *xdrs;
  223. {
  224.     if (xdr_fhandle(xdrs, &argp->wa_fhandle) &&
  225.         xdr_long(xdrs, (long *) &argp->wa_begoff) &&
  226.         xdr_long(xdrs, (long *) &argp->wa_offset) &&
  227.         xdr_long(xdrs, (long *) &argp->wa_totcount))
  228.         return(TRUE);
  229.  
  230.     return(FALSE);
  231. }
  232.